Amazon Connectでお客様からの「ありがとう」をカウントしてみた
Amazon Connect アドベントカレンダー 2024、5日目の記事です!
クラスメソッドとギークフィードさん、クラウドビルダーズさん、ネットプロテクションズさん、AWSJさんの有志が募ってチャレンジしている企画になります。
(アドベントカレンダーのカレンダー一覧はこちら↓)
はじめに
Amazon Connect Contact Lensの音声分析機能を使い、お客様からオペレーターへの「ありがとう」をカウントして記録する方法を考えてみました。
オペレーターとの通話時にお客様が「ありがとう」と発言したことをContact Lensのルールで検知し、EventBridge > Lambda > DynamoDBで「ありがとう」をカウントします。
やってみた
前提条件
- Amazon Connectは構築済み
Amazon Connectの設定
Contact Lensの有効化
AWSコンソールから対象のAmazon Connectインスタンス > 分析ツールを開きます。
Contact Lensが有効になっていない場合は有効にして設定を保存します。
コンタクトフローの設定
コンタクトフローに記録と分析の動作を設定ブロックを追加します。
通話記録と分析をオンに設定します。
分析は音声分析を有効にするにチェックを入れ、通話後の分析を選択します。
Contact Lensルールの作成
分析と最適化からルールを開き、ルールを作成を選択します。
会話分析のルールを作成します。
Contact Lens 通話後分析が利用可能 を選択し、顧客が「ありがとう」と話した場合に検知するように設定します。
アクションのカテゴリ名を入力し、アクションにはEventBridgeイベントを生成を選択します。
ルールを作成します。
DynamoDBの設定
以下の内容でDynamoDBを作成します。
パーティションキー:date(文字列)
ソートキー:staff_id(文字列)
Lambdaの設定
Lambda関数の作成
Lambda関数を作成します。
一般設定のタイムアウトを1分に変更します。
ロールに権限の追加
DynamoDBの記録用と、Connectのユーザー情報を取得する為に以下の権限を追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"connect:DescribeUser",
"dynamodb:UpdateItem"
],
"Resource": "*"
}
]
}
EventBridgeから送信されるイベント
EventBridgeから送信されるイベントの構造は以下です。
このイベントのagentArnを使ってDynamoDBに記録する際のユーザー名を取得します。
{
"version": "0", // set by EventBridge
"id": "aaaaaaaa-bbbb-cccc-dddd-bf3703467718", // set by EventBridge
"source": "aws.connect",
"detail-type": "Contact Lens Post Call Rules Matched",
"account": "your AWS account ID",
"time": "2020-04-27T18:43:48Z",
"region": "us-east-1", // set by EventBridge
"resources": ["arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN"],
"detail": {
"version": "1.0",
"ruleName": "ACCOUNT_CANCELLATION", // Rule name
"actionName": "NOTIFY_CUSTOMER_RETENTION",
"instanceArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN",
"contactArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN/contact/contact-ARN",
"agentArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN/agent/agent-ARN",
"queueArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN/queue/queue-ARN",
}
}
コード
コード内のDynamoDBテーブル名を作成したDynamoDBテーブル名に変更します。
agent_arnからagent IDを抽出しagent nameを取得してDynamoDBに記録しています。
import boto3
import datetime
from datetime import timedelta
def extract_agent_id(agent_arn):
# agent ARNから agent ID を抽出
return agent_arn.split('/')[-1]
def get_instance_id(agent_arn):
# agent ARNからinstance IDを抽出
return agent_arn.split('/')[1]
def get_agent_username(connect_client, instance_id, agent_id):
# Amazon Connectから agent の情報を取得
response = connect_client.describe_user(
InstanceId=instance_id,
UserId=agent_id
)
return response['User'].get('Username', '')
def lambda_handler(event, context):
# AWS クライアントの初期化
dynamodb = boto3.resource('dynamodb')
connect = boto3.client('connect')
table = dynamodb.Table('DynamoDBテーブル名')
# 現在の日時(JST)を取得
jst_time = datetime.datetime.now() + timedelta(hours=9)
current_date = jst_time.strftime('%Y-%m-%d')
# イベントから agent の情報を抽出
agent_arn = event['detail']['agentArn']
agent_id = extract_agent_id(agent_arn)
instance_id = get_instance_id(agent_arn)
# Connect から agent の username を取得
agent_username = get_agent_username(connect, instance_id, agent_id)
# DynamoDB のレコードを更新
# ありがとうカウントを1増やし、agent_name を設定
table.update_item(
Key={
'date': current_date,
'staff_id': agent_id
},
UpdateExpression='ADD arigato :arigato SET agent_name = :name',
ExpressionAttributeValues={
':arigato': 1,
':name': agent_username
}
)
EventBridgeの設定
EventBridgeのルールを作成します。
名前を入力しデフォルトのまま作成を進めます。
イベントソースは以下の内容で設定します。
イベントソース:AWSのサービス
AWSのサービス:Amazon Connect
イベントタイプ:Contact Lens Post Call Rules Matched
ターゲットは以下の内容で設定します。
ターゲットを選択:Lambda 関数
関数:作成した関数を選択
ルールを作成します。
動作確認
Amazon Connectに架電してありがとうがカウントされるか動作確認してみました。
約5分後にDynamoDBに記録されました。
これでどのオペレーターが1日に何回ありがとうを言ってもらえたか記録できます。
お客様からの感謝を記録することでオペレーターのモチベーションアップにも繋がるかと思います。
記録されたデータを可視化してみてもよさそうですね。
参考情報